﻿#pragma once
#include "Drillingrig_global.h"
#include <QStringView>
#include <QVariant>
class EquipmentAction;
class QJsonObject;
class QString;
using QStringList = QList<QString>;
class QStringView;

class DRILLINGRIG_EXPORT AbstruactEventMediator
{
public:
	//************************************
	// 名称:   	registerAction
	// 全称:  	AbstruactEventMediator::registerAction
	// 描述:	设备交互接口类注册到中介者中
	// 权限:   	virtual public 
	// 返回值:	void
	// 修饰符: 	
	// 参数: 	EquipmentAction * action	交互接口
	// 参数: 	QString const & name		交互接口名字/标识
	//************************************
	virtual void registerAction(EquipmentAction* action, QStringView const name) = 0;

	//************************************
	// 函数名:		unRegisterAction
	// 函数全称:	AbstruactEventMediator::unRegisterAction
	// 权限:		virtual public 
	// 返回值:		void
	// 修饰符:		
	// 参数:		QStringView const name
	// 描述:		反注册
	//************************************
	virtual void unRegisterAction(QStringView const name) = 0;

	//************************************
	// 名称:   	push
	// 全称:  	AbstruactEventMediator::push
	// 描述:	消息发布接口 计划是 上位机->plc
	//			所有同事类接口update都将调用
	// 权限:   	virtual public 
	// 返回值:	void
	// 修饰符: 	
	// 参数: 	QJsonObject const & obj		具体的消息
	// 参数: 	QString const & who			发布者自身标识
	//************************************
	virtual void push(QJsonObject const& obj, QStringView const who = QStringView()) = 0;


	//************************************
	// 名称:   	update
	// 全称:  	AbstruactEventMediator::update
	// 描述:	更新接口	计划是 plc->上位机
	// 权限:   	virtual public 
	// 返回值:	void
	// 修饰符: 	
	// 参数: 	QJsonObject const & obj		更新的消息
	// 参数: 	QString const & who			发布者消息
	// 参数:	QString const & to			要求转发给谁
	//************************************
	virtual void push(QJsonObject const& obj, QStringView const who, QStringView const to) = 0;

	//************************************
	// 名称:   	setCamera
	// 全称:  	AbstruactEventMediator::setCamera
	// 描述:	设置相机的rtsp地址
	// 权限:   	virtual public 
	// 返回值:	void
	// 修饰符: 	
	// 参数: 	QString const & camera
	//************************************
	virtual void setCamera(QStringList const& camera) = 0;

	virtual void reportLog(QStringView log, int level = 0) = 0;

	virtual void connectStateChanged(int state) = 0;

	virtual QVariant request(QJsonObject const& obj, QStringView const requester, QStringView const to) = 0;
};
